package main;

import java.util.ArrayList;
import java.util.List;

import ausruestung.Ruestung;
import ausruestung.Waffe;

import kampf.Blobb;
import kampf.Conan;
import kampf.Kaempfer;
import kampf.SchwarzerRitter;
import kampf.Xenia;

public class Main {

	public List<Kaempfer> kaempfer = new ArrayList<Kaempfer>();
	public Kaempfer sr = new SchwarzerRitter();
	private int duplosen = 600;
	private Kaempfer[] soeldner={
			new Conan(40,6,120),
			new Xenia(60,8,110),
			new Blobb(80,10,100)
	};
	private Ruestung[] ruestungen={
		new Ruestung("Decke",4,20),
		new Ruestung("Kettenhemd",6,50),
		new Ruestung("Rostige Ruestung",7,70),
		new Ruestung("Survivaball",10,100)};
	private Waffe[] waffen={
		new Waffe("Fingerfalle",4,30),
		new Waffe("Abendstern",7,70),
		new Waffe("Bogen",8,90),
		new Waffe("Master Blaster",10,120)
	};

	public static void main(String[] args) {
		new Main().starten();
	}

	private void starten() {
		System.out.println("Myth of Moneycraft\n" +
				           "==================\n");
		int eingabe = -1;
		while (eingabe != 0) {
			System.out.println("Sie haben " + duplosen
					+ " Duplosen, was wollen Sie?\n" 
					+ " (0) auf zum Kampf\n"
					+ " (1) Soeldner anwerben\n" 
					+ " (2) Waffe kaufen\n" 
					+ " (3) Ruestung kaufen: ");
			eingabe=Eingabe.leseInt();
			if (eingabe == 1)
				neuerSoeldner();
			if (eingabe == 2)
				neueWaffe();
			if (eingabe==3)
				neueRuestung();
			if(duplosen<0){
				System.out.println("Der Betrueger wurde hingerichtet");
				return;
			}
		}
		kaempfen();
	}
	
	private int auswahl(Object[] o){
		if(o==null){
			System.out.println("Aktion verpufft");
			return -1;
		}
		for(int i=0; i<o.length; i++)
			System.out.println("("+i+") "+o[i]);
		int ergebnis=-1;
		while(ergebnis<0 || ergebnis>= o.length)
		  ergebnis= Eingabe.leseInt();
		return ergebnis;
	}
	
	//Absturz, wenn vorher kein Kaempfer gew�hlt
	private void neueRuestung() {
		System.out.println("Welche Ruestung?");
		Ruestung r= ruestungen[auswahl(ruestungen)];
		duplosen-=r.getPreis();
		System.out.println("welcher Soeldner?");
		Kaempfer k=kaempfer.get(auswahl(kaempfer.toArray()));
		k.nimmRuestung(r);
	}

	//Absturz, wenn vorher kein Kaempfer gew�hlt
	private void neueWaffe() {
		System.out.println("Welche Waffe?");
		Waffe w= waffen[auswahl(waffen)];
		duplosen-=w.getPreis();
		System.out.println("welcher Soeldner?");
		Kaempfer k=kaempfer.get(auswahl(kaempfer.toArray()));
		k.nimmWaffe(w);		
	}

	private void neuerSoeldner() {
		System.out.println("welcher Soeldner?");
		Kaempfer k=soeldner[auswahl(soeldner)];
		kaempfer.add(k);
		duplosen-=k.getSold();
	}

	private void kaempfen() {
		boolean finished = false;
		int schaden = 0;
		
		if (kaempfer.isEmpty()) {
			System.out.println("Keine Kaempfer gewählt");
			return;
		}
		
		while (!finished) {
			for (Kaempfer k:kaempfer) {
				if (k.getGesundheit() > 0) {
					finished = false;
					
					schaden = sr.abwehren(k.kaempfen());
					sr.setGesundheit(sr.getGesundheit()-schaden);
					
					schaden = k.abwehren(sr.kaempfen());
					k.setGesundheit(k.getGesundheit()-schaden);
					
					if (k.getGesundheit() <= 0) {
						System.out.println(k+" ist besiegt");
						finished = true;
					}
		
					if (sr.getGesundheit() <= 0) {
						System.out.println(sr+" ist besiegt");
						finished = true;
					}
					
					System.out.println("Gesundheit von "+k+": "+k.getGesundheit());
					System.out.println("Gesundheit vom scharzen Ritter: "+sr.getGesundheit());
				}
			}
		}
		System.out.println("Kampf beendet");
	}

}
